<?php
require_once 'application/library/config/gcConfigRegistry.php';
require_once 'application/constant/constant.php';

/** 
 * 事务类
 * gcDbTransaction
 * @author    Soochow University
 * @version   1.0
 * @exclude   作  成  日：2011/04/07
 */
class gcDbTransaction{
    
    /**
     * DB
     */
    private $DB;

    /**
     * __construct
     */
    public function __construct(){
    }

    /**
     * 事务数据取得
     * Select_T
     * @param   string  $sql
     * @param   string  $parameter
     * @param   string  $db
     * @return  array
     */
    public function Select_T($sql,$parameter,$type){
        if(empty($parameter)){
            $parameter=array();
        }
        
        switch ($type){
            case dbReturnType::ALL:
                return $this->fetchAll($sql,$parameter);
                break;
            case dbReturnType::ASSOC:
                return $this->fetchAssoc($sql,$parameter);
                break;
            case dbReturnType::COL:
                return $this->fetchCol($sql,$parameter);
                break;
            case dbReturnType::ONE:
                return $this->fetchOne($sql,$parameter);
                break;
            case dbReturnType::ROW:
                return $this->fetchRow($sql,$parameter);
                break;
            default:
                return $this->query($sql,$parameter);
        }
    }

    /**
     * 事务数据登录
     * Insert_T
     * @param   string  $sql
     * @param   string  $parameter
     * @return  array
     */
    public function Insert_T($sql,$parameter){
        $result=$this->query($sql, $parameter);
        return $this->DB->lastInsertId();
    }
    
    /**
     * 事务批量数据登录
     * batchInsert_T
     * @param   string  $obj
     * @param   string  $parameter
     * @return  array
     */
    public function batchInsert_T($sql,$arrParameter){
        $index = 0;
        foreach ($arrParameter as $parameter ){
            $this->query($sql, $parameter);
            $index++;
        }
        return $index;
    }
    
    /**
     * 事务数据更新
     * Update_T
     * @param   string  $sql
     * @param   string  $parameter
     * @param   string  $db
     * @return  array
     */
    public function Update_T($sql,$parameter){
        $result=$this->query($sql, $parameter);
        return $result->rowCount();
    }
    
    /**
     * 事务数据消除
     * Delete_T
     * @param   string  $sql
     * @param   string  $parameter
     * @return  array
     */
    public function Delete_T($sql,$parameter){
        $result=$this->query($sql, $parameter);
        return $result->rowCount();
    }
    
    /**
     * 事务开始
     * beginTransaction
     * @return  obj
     */
    public function beginTransaction(){
        $Gc_db=new gcDb();
        $Gc_db->openDb();
        $this->DB=$Gc_db->db;
        $this->DB->beginTransaction();
        return  $this->DB;
    }
    
    /**
     * 事务提交
     * commit
     * @param   string  $db
     */
    public function commit(){
        $this->DB->commit();
        $this->DB->closeConnection();
    }
    
    /**
     * 事务回滚
     * rollBack
     */
    public function rollBack(){
        $this->DB->rollBack();
        $this->DB->closeConnection();
    }

    /**
     * 设定事务
     * setTransaction
     * @param   string  $db
     * @return  array
     */
    public function setTransaction($db){
        $this->DB=$db;
    }
    
    /**
     * SQL语句执行
     * query
     * @param   string  $db
     * @param   string  $parameter
     * @return  array
     */
    private function query($sql, $parameter){
        $result = $this->DB->query($sql,$parameter);
        return $result;
    }
    
    /**
     * 全部数据返回
     * fetchAll
     * @param   string  $sql
     * @param   string  $parameter
     * @return  array
     */
    private function fetchAll($sql,$parameter){
        $result = $this->DB->fetchAll($sql, $parameter);
        return $result;
    }

    /**
     * 数字索引结果返回
     * fetchAssoc
     * @param   string  $sql
     * @param   string  $parameter
     * @return  array
     */
    private function fetchAssoc($sql,$parameter){
        $result = $this->DB->fetchAssoc($sql, $parameter);
        return $result;
    }

    /**
     * 列返回
     * fetchCol
     * @param   string  $sql
     * @param   string  $parameter
     * @return  array
     */
    private function fetchCol($sql,$parameter){
        $result = $this->DB->fetchCol($sql, $parameter);
        return $result;
    }

    /**
     * 单个值返回
     * fetchOne
     * @param   string  $sql
     * @param   string  $parameter
     * @return  array
     */
    private function fetchOne($sql,$parameter){
         $result = $this->DB->fetchOne($sql, $parameter);
         return $result;
    }

    /**
     * 行返回
     * fetchRow
     * @param   string  $sql
     * @param   string  $parameter
     * @return  array
     */
    private function fetchRow($sql,$parameter){
        $result = $this->DB->fetchRow($sql, $parameter);
        return $result;
    }
}

